haha~我像荒唐鏡一樣跳走了,現在又跳回來了~打我啊笨蛋(被扁),接下來這邊會針對查詢稍微做一下補充,例如該如何使用 Model 條件式查詢,查詢之後又該如何排序呢?
先讓我們回到前世,阿不是,先讓我們回顧一下前面的 Model 基礎操作,我們理解可以使用 get()、all() 來做單一查詢 or 列出資料清單:
$user = aboutModel::get($id);
$user = aboutModel::all();
但是 Model 基礎操作 系列卻沒有講到條件與排序的動作,所以這邊將會介紹其他的 Model 基礎操作。
接下來的範例我會將程式碼撰寫於 about/controller/index.php
中。
經過前兩篇的資料操作系列,我們可以理解到如果使用 Model 操作資料是一件多麼方便的事情,所以這邊將會介紹該如何使用 Model 的條件式查詢,其實也就是帶上 where()
方法而已,但是這邊將會搭配使用前面所學的資料操作技巧,也就是構造器。
那麼首先我這邊舉例我要篩選 user 資料表中班上同學的身高,然後我要找身高大於 170 公分的同學:
$user = aboutModel::where('height', '>', 170)->select();
echo $user;
那麼結果就會像這樣子是一個陣列物件 ↓
當然也可以不使用構造器的方式來製作條件篩選,也就是使用 all()
方法來製作:
$user = aboutModel::all(['name' => 'QQ先生']);
echo $user;
使用 all()
方法去做條件篩選的方式是帶入陣列條件,但是如果想要查詢多筆資料呢?用 all()
可不可以?
$user = aboutModel::all(['name' => 'QQ先生','name' => '王小明']);
echo $user;
那我們就直接來看查詢後的結果 ↓
所以由此可知,如果想要做比較複雜的條件查詢,那麼我會建議使用構造器去撰寫,你也會比較直覺且好維護。
接下來這邊將會講解刪除方法的使用方式,也就是 delete()
,在使用刪除方法時,建議請依照主鍵也就是 key
來做判斷,否則可能會發生誤刪資料的事件,那麼刪除方的法非常簡單:
$user = aboutModel::get($id);
$user->delete();
你沒有看錯就是這麼簡潔,當你成功刪除後 delete()
將會回傳一個布林值 (true
or false
),所以我們可以依照它回傳的值進而判斷是否刪除成功:
$user = aboutModel::get($id);
if ($user->delete()) {
return '刪除成功'.$user->id;
} else {
return $user->getError();
}
那麼我這邊路由已經先註冊好了 Route::get('/about/delete/:id', 'about/index/delete');
,接下來直接訪問路由就可以直接刪除特定的資料,例如我現在想要刪除 [QQ 先生] ↓
當然我們也可以來看一下資料表確定 QQ 先生真的已經被刪除了 ↓
最後這邊補充輸出 JSON 格式的方式,這邊我將會使用 all()
方法來撰寫,另外由於現在前後端分離的關係,現在大多都是採用 API 開發輸出 JSON 格式,所以 JSON 格式的輸出就格外的重要,但是寫法其實也很簡單,因為 ThinkPHP 本身也有提供該方法,只需要這樣寫即可:
$user = aboutModel::all();
return $user->toJson();
另外 ThinkPHP 也有更簡潔的寫法,但是簡潔寫法本身呢…就是原本的寫法,原本寫法就是輸出 JSON 格式:
$user = aboutModel::all();
return $user;
但是我覺得這邊還是告知一下有這種寫法會比較好。
最後如果你有發生 rying to get property 'name' of non-object
的錯誤訊息,那代表是我前面章節的路由註冊上較不妥的關係,主要是這一隻路由導致錯誤:
Route::get('/about/:id', 'about/index/select');
你只需要將路由修改成以下就可以解決囉~
Route::get('/about/select/:id', 'about/index/select');
本文同步更新於:https://hsiangfeng.github.io/php/20190919/503019302/